import type { NuxtPage } from 'nuxt/schema';
// https://nuxt.com/docs/api/configuration/nuxt-config
export default defineNuxtConfig({
  ssr: true,
  // 配置SEO
  app: {
    head: {
      title: 'Extending Configs is Fun!',
      meta: [
        {
          name: 'description',
          content: 'I am using the extends feature in nuxt 3!',
        },
      ],
    },
  },
  devtools: { enabled: true },
  // 导入插件样式 及 自定义的公共样式
  css: [
    'element-plus/dist/index.css',
    './assets/css/common.less',
  ],
  components: [
    {
      path: '~/components', // 页面导入组件就不需要后缀 .vue 直接 ==> import Header from '~/components/Header'
      extensions: ['.vue'], // 限制 .vue 的扩展名才能是组件
      pathPrefix: false, // 仅根据名称而不是路径自动导入组件 == > 例如，~/components/Some/MyComponent 是这样 <MyComponent> 不是 <SomeMyComponent>
    },
  ],
  // 配置需要用的组件库
  modules: [
    '@element-plus/nuxt',
    [
      '@pinia/nuxt',
      {
        autoImports: [
          // 自动引入 `defineStore()`
          'defineStore',
          // 自动引入 `defineStore()` 并重命名为 `definePiniaStore()`
          ['defineStore', 'definePiniaStore'],
        ],
      },
    ],
    '@pinia-plugin-persistedstate/nuxt',
  ],
  //  运行时的变量 -- 会被 .env 里面的值覆盖
  runtimeConfig: {
    // 只能在服务端拿到
    apiBase: '',
    sourceIp2: '',
    isServer: true,
    // 服务端 和 客户端 都能拿到
    public: {
      apiBase: '',
      sourceIp2: '',
    },
  },
  // 渲染配置，根据需求配置，也可以不需要
  routeRules: {
    //    '/user': { redirect: '/name'}, // 如果请求的是 "/user" 那么就重定向到 "/name"
    //    '/name': { ssr: false },  // 如果请求的是 "/name" 那么就 关闭服务端渲染
    //    '/about': { prerender: true}, // 变成纯静态的页面
    //    '/name/**': { static: true, headers: {'cache-control': 'no-cache'}} // 可以设置 name 下面所有文件的 响应头信息
    //    'api/common/set': { cors: true}
  },
  experimental: {
    viewTransition: true, // 启用视图转换 API 与客户端路由器的集成。
  },
  // 在构建时设置中间件  将自己命名的 中间件 挂钩到所有的vue页面
  hooks: {
    'pages:extend'(pages) {
      function setMiddleware(pages: NuxtPage[]) {
        for (const page of pages) {
          if (/* 条件 */ true) {
            page.meta ||= {};
            // 注意，这将覆盖页面中' definePageMeta '中设置的任何中间件
            page.meta.middleware = ['user'];
          }
          if (page.children) {
            setMiddleware(page.children);
          }
        }
      }
      setMiddleware(pages);
    },
  },
  // 添加插件 也可以添加自己的方法，在这里首屏加载会执行的
  plugins: ['~/plugins/first-call.ts'],
  vite: {
    // 打包后清除console和debugger，注意：server下文件的不会删除
    esbuild: {
      drop: ['console', 'debugger'],
    },
    // 跨域处理 配置代理
    server: {
      proxy: {
        '/api': {
            target: 'https://www.produce.com.cn',  //这里是接口地址
            changeOrigin: true
        },
        '/uploads': {
          target: 'https://admin.produce.com.cn',  //这里是后台资源
          changeOrigin: true
      }
      }
    }
  },
  // 配置 端口
  devServer: {
    port: 3361, // default: 3369
    host: '0.0.0.0', // default: localhost
  },
});
